home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / Widgets / netwidgets.py < prev    next >
Encoding:
Python Source  |  2000-11-16  |  12.4 KB  |  473 lines

  1. import BUIx
  2. import BVideo
  3. import Raster
  4. import BBLib
  5. import math
  6. import sys
  7. import MenuWidget
  8. import BInput
  9. import ListWidget
  10. import ScorerWidgets
  11. import NetMisc
  12.  
  13. CharList = None
  14. #print "arrecho"
  15.  
  16. def ChangePlayer(n):
  17.     global CharList
  18.     CharList.ChangeImage(n)
  19.  
  20. #
  21. # Seleccion de personaje
  22. ################################
  23. class B_ImageListWidget(BUIx.B_RectWidget):
  24.  
  25.     def __init__(self,Parent,MenuDescr,StackMenu):
  26.         global CharList
  27.  
  28.         imagelist=MenuDescr["ImageList"]
  29.         self.Bitmap={}
  30.         self.IDX = imagelist[0][0]
  31.  
  32.         for i in imagelist:
  33.             bitm = BBLib.B_BitMap24()
  34.             bitm.ReadFromBMP(i[1])
  35.             self.Bitmap[i[0]] = bitm
  36.  
  37.         self.vidw,self.vidh=self.Bitmap[self.IDX].GetDimension()
  38.         BUIx.B_RectWidget.__init__(self,Parent,MenuDescr["Name"],self.vidw,self.vidh)
  39.         self.Selected=0
  40.         self.Solid=0
  41.         self.Border=0
  42.         self.SetDrawFunc(self.Draw)
  43.         CharList = self
  44.         self.IDX         = MenuDescr["GetCharType"]()
  45.  
  46.  
  47.     def ChangeImage(self,name):
  48.         self.IDX = name
  49.  
  50.     def Draw(self,x,y,time):
  51.         Raster.SetPosition(x,y)
  52.         Raster.DrawImage(self.vidw,self.vidh,"RGB","Normal",self.Bitmap[self.IDX].GetData())
  53.         self.DefDraw(x,y,time)
  54.  
  55.     def FinalRelease(self):
  56.         global CharList
  57.         CharList = None
  58.         BUIx.B_RectWidget.FinalRelease(self)
  59.  
  60.     def AcceptsFocus(self):
  61.         return 0
  62.  
  63. #
  64. #  Seleccion de mapas
  65. #############################################
  66. class B_MapListWidget(BUIx.B_RectWidget,MenuWidget.B_MenuTreeItem):
  67.     def __init__(self,Parent,MenuDescr,StackMenu):
  68.         name=MenuDescr["LeftMap"]
  69.         self.LeftMap       = BBLib.B_BitMap24()
  70.         self.LeftMap.ReadFromBMP(name)
  71.         self.LSize,garbage = self.LeftMap.GetDimension()
  72.  
  73.         name=MenuDescr["RightMap"]
  74.         self.RightMap      = BBLib.B_BitMap24()
  75.         self.RightMap.ReadFromBMP(name)
  76.         self.RSize,garbage = self.RightMap.GetDimension()
  77.  
  78.         name=MenuDescr["SelMap"]
  79.         self.SelMap      = BBLib.B_BitMap24()
  80.         self.SelMap.ReadFromBMP(name)
  81.         self.SSize,self.vidh = self.SelMap.GetDimension()
  82.  
  83.         name=MenuDescr["MarkMap"]
  84.         self.MarkMap     = BBLib.B_BitMap24()
  85.         self.MarkMap.ReadFromBMP(name)
  86.         self.SSize,self.vidh = self.MarkMap.GetDimension()
  87.  
  88.         self.vidw = self.SSize*3+self.LSize+self.RSize
  89.  
  90.         imagelist = NetMisc.ActualizeMapsBitmaps()
  91.         self.Bitmap=[]
  92.         self.IDX = 0
  93.  
  94.         self.MapSetValue = MenuDescr["MapSetValue"]
  95.         dta              = MenuDescr["MapGetValue"]()
  96.  
  97.         for i in imagelist:
  98.             bitm = BBLib.B_BitMap24()
  99.             bitm.ReadFromBMP(i[0])
  100.  
  101.             self.Bitmap.append([bitm,i[1],i[2],0])
  102.  
  103.             for j in dta:
  104.                 if j == i[2]:
  105.                     self.Bitmap[len(self.Bitmap)-1][3] = 1
  106.  
  107.         self.MapW,self.MapH = self.Bitmap[self.IDX][0].GetDimension()
  108.  
  109.         self.MapW = (self.SSize - self.MapW)/2
  110.         self.MapH = (self.vidh  - self.MapH)/2
  111.  
  112.         BUIx.B_RectWidget.__init__(self,Parent,MenuDescr["Name"],self.vidw,self.vidh)
  113.         MenuWidget.B_MenuTreeItem.__init__(self,MenuDescr,StackMenu)
  114.  
  115.         self.Selected=0
  116.         self.Solid=0
  117.         self.Border=0
  118.         self.SetDrawFunc(self.Draw)
  119.  
  120.     def Draw(self,x,y,time):
  121.         global LabelName
  122.         if self.IDX == 0:
  123.             first = len(self.Bitmap)-1
  124.         else:
  125.             first = self.IDX-1
  126.  
  127.         if self.IDX == len(self.Bitmap)-1:
  128.             last = 0
  129.         else:
  130.             last = self.IDX+1
  131.  
  132.         if self.Bitmap[first][3]:
  133.             Raster.SetPosition(x+self.SSize*0+self.LSize, y)
  134.             Raster.DrawImage(self.SSize,self.vidh,"RGB","Normal",self.MarkMap.GetData())
  135.  
  136.         if self.Bitmap[self.IDX][3]:
  137.             Raster.SetPosition(x+self.SSize*1+self.LSize, y)
  138.             Raster.DrawImage(self.SSize,self.vidh,"RGB","Normal",self.MarkMap.GetData())
  139.  
  140.         if self.Bitmap[last][3]:
  141.             Raster.SetPosition(x+self.SSize*2+self.LSize, y)
  142.             Raster.DrawImage(self.SSize,self.vidh,"RGB","Normal",self.MarkMap.GetData())
  143.  
  144.         if self.GetHasFocus():
  145.             Raster.SetPosition(x,y+self.MapH)
  146.             Raster.DrawImage(self.LSize,self.vidh-2*self.MapH,"RGB","Normal",self.LeftMap.GetData())
  147.  
  148.             Raster.SetPosition(x+self.SSize*3+self.LSize, y+self.MapH)
  149.             Raster.DrawImage(self.LSize,self.vidh-2*self.MapH,"RGB","Normal",self.RightMap.GetData())
  150.  
  151.             if int(time*5)%2 == 0:
  152.                 Raster.SetPosition(x+self.SSize*1+self.LSize, y)
  153.                 Raster.DrawImage(self.SSize,self.vidh,"RGB","Normal",self.SelMap.GetData())
  154.  
  155.  
  156.         Raster.SetPosition(x+self.MapW+self.SSize*0+self.LSize, y+self.MapH)
  157.         Raster.DrawImage(self.SSize-2*self.MapW,self.vidh-2*self.MapH,"RGB","Normal",self.Bitmap[first][0].GetData())
  158.  
  159.  
  160.         Raster.SetPosition(x+self.MapW+self.SSize*1+self.LSize, y+self.MapH)
  161.         Raster.DrawImage(self.SSize-2*self.MapW,self.vidh-2*self.MapH,"RGB","Normal",self.Bitmap[self.IDX][0].GetData())
  162.  
  163.         Raster.SetPosition(x+self.MapW+self.SSize*2+self.LSize, y+self.MapH)
  164.         Raster.DrawImage(self.SSize-2*self.MapW,self.vidh-2*self.MapH,"RGB","Normal",self.Bitmap[last][0].GetData())
  165.  
  166.         self.DefDraw(x,y,time)
  167.  
  168.         LabelName = self.Bitmap[self.IDX][1]
  169.  
  170.     def IncMenuItem(self):
  171.         self.IDX = self.IDX+1
  172.         if self.IDX >= len(self.Bitmap):
  173.             self.IDX = 0
  174.  
  175.  
  176.     def DecMenuItem(self):
  177.         self.IDX = self.IDX-1
  178.         if self.IDX < 0:
  179.             self.IDX = len(self.Bitmap)-1
  180.  
  181.     def ActivateItem(self,act):
  182.         if not act:
  183.             MenuWidget.B_MenuTreeItem.ActivateItem(self,act)
  184.             return
  185.         self.Bitmap[self.IDX][3] = not self.Bitmap[self.IDX][3]
  186.         v = []
  187.         for i in self.Bitmap:
  188.             if i[3]:
  189.                 v.append(i[2])
  190.         self.MapSetValue(v)
  191.  
  192.  
  193.     def AcceptsFocus(self):
  194.         return 1
  195.  
  196. def FullFillPassword(cad,char):
  197.     res =""
  198.     for x in range(len(cad)):
  199.         res = res + char
  200.     return res
  201.  
  202. #
  203. #  Entrada de texto
  204. #################################################
  205. class B_InputBox(MenuWidget.B_MenuItemTextNoFX):
  206.     def __init__(self,Parent,MenuDescr,StackMenu):
  207.         MenuWidget.B_MenuItemTextNoFX.__init__(self,Parent,MenuDescr,StackMenu)
  208.         mentirita = None
  209.  
  210.         self.Label    = MenuDescr["Name"]
  211.         self.Input    = MenuDescr["GetInput"]()
  212.         self.MaxSize  = MenuDescr["MaxSize"]
  213.         self.SetInput = MenuDescr["SetInput"]
  214.  
  215.         self.IManager=BInput.GetInputManager()
  216.  
  217.         self.ListenerName=MenuDescr["Name"]+" Listener"
  218.         self.Listener=BInput.B_InputListener(self.ListenerName) #No se puede heredar m·ltiple de una clase generada por SWIG
  219.         self.Listener.SetPythonFunc(self.ListenDevice)
  220.         self.Parent = Parent
  221.         self.xx=-1
  222.  
  223.         if MenuDescr.has_key("PasswordChar"):
  224.             self.PasswordChar = MenuDescr["PasswordChar"]
  225.         else:
  226.             self.PasswordChar = None
  227.  
  228.         try:
  229.             self.Locked = MenuDescr["Locked"]()
  230.         except:
  231.             self.Locked = 0
  232.  
  233.  
  234.     def Draw(self,x,y,time):
  235.         cursor = ""
  236.         if self.xx==-1:
  237.             self.xx = x
  238.             self.yy = y
  239.  
  240.         if self.GetVisible()==0:
  241.             return
  242.  
  243.         #print "MenuItemText",self.Name()
  244.         foc=self.GetHasFocus()
  245.         if foc:
  246.             self.SetColor(252,247,167)
  247.             if not self.Locked:
  248.                 if((int(time*5)%2)==0):
  249.                     cursor = ">"
  250.         else:
  251.             self.SetColor(207,144,49)
  252.  
  253.         if self.PasswordChar:
  254.             self.SetText(self.Label+" "+FullFillPassword(self.Input,self.PasswordChar)+cursor)
  255.         else:
  256.             self.SetText(self.Label+" "+self.Input+cursor)
  257.  
  258.         self.DefDraw(self.xx-self.MaxSize*3,self.yy,time)
  259.  
  260.     def SetHasFocus(self,foc):
  261.         MenuWidget.B_MenuItemTextNoFX.SetHasFocus(self,foc)
  262.         if self.Locked:
  263.             return
  264.         if(foc==1):
  265.             self.BeginDefineKey()
  266.         print "Let's Write!",foc
  267.  
  268.     def FinalRelease(self):
  269.         self.Listener = None
  270.         self.IManager = None
  271.         self.Parent = None
  272.         self.SetInput = None
  273.         MenuWidget.B_MenuItemTextNoFX.FinalRelease(self)
  274.         print "FinalRelease"
  275.  
  276.     def BeginDefineKey(self):
  277.         keyb=self.IManager.GetAttachedDevice("Keyboard")
  278.         keyb.AddListener(self.Listener)
  279.         self.oldInputActionsSet=self.IManager.GetInputActionsSet()
  280.         self.IManager.SetInputActionsSet("MenuRedefine")
  281.  
  282.     def EndDefineKey(self):
  283.         self.IManager.SetInputActionsSet(self.oldInputActionsSet)
  284.         self.oldInputActionsSet = None
  285.         keyb=self.IManager.GetAttachedDevice("Keyboard")
  286.         keyb.RemoveListener(self.ListenerName)
  287.  
  288.     def AddLetter(self,letra):
  289.         if(len(self.Input)<self.MaxSize):
  290.             self.Input = self.Input+letra
  291.  
  292.     def ActivateItem(self,act):
  293.         if(act):
  294.             self.Parent.NextFocus()
  295.         MenuWidget.B_MenuItemTextNoFX.ActivateItem(self,act)
  296.  
  297.     def ListenDevice(self,x,y,z):
  298.         if z==1.0:
  299.             if x=="Enter":
  300.                 self.EndDefineKey()
  301.                 #self.Parent.NextFocus()
  302.             elif x=="Down":
  303.                 self.EndDefineKey()
  304.             elif x=="Tab":
  305.                 self.EndDefineKey()
  306.             elif x=="Up":
  307.                 self.EndDefineKey()
  308.             elif x=="Esc":
  309.                 self.EndDefineKey()
  310.             elif x=="Backspace":
  311.                 largo = len(self.Input)
  312.                 if(largo!=0):
  313.                     self.Input = self.Input[0:largo-1]
  314.             elif x=="Delete":
  315.                 self.Input = ""
  316.             elif len(x)==1:
  317.                 self.AddLetter(x)
  318.             elif x=="Decimal":
  319.                 self.AddLetter(".")
  320.             elif x=="Period":
  321.                 self.AddLetter(".")
  322.             elif x[0:6]=="Numpad":
  323.                 self.AddLetter(x[6])
  324.             elif x[0:6]=="Space":
  325.                 self.AddLetter(" ")
  326.             self.SetInput(self.Input)
  327.  
  328.     def __del__(self):
  329.         print "Chau! input box"
  330.         MenuWidget.B_MenuItemTextNoFX.__del__(self)
  331.  
  332.  
  333. #
  334. # Lista de servidores
  335. ###########################
  336.  
  337. LaListaDeServidores = None
  338.  
  339. class B_ServerListWidget(ListWidget.B_ListWidget):
  340.  
  341.     def __init__(self,Parent,Menudesc,StackMenu,VertPos=0):
  342.         global LaListaDeServidores
  343.         ListWidget.B_ListWidget.__init__(self,Parent,Menudesc,StackMenu,VertPos)
  344.         self.StackMenu = StackMenu
  345.  
  346.         self.DownArrow.SetAlpha(1) # Parche, no funciona la llamada a AdjustScrollArrows() en AddMenuElement(),
  347.                                    # hasta que lo averigⁿe.
  348.         LaListaDeServidores = self
  349.         self.SetDrawFunc(self.Draw)
  350.  
  351.     def Draw(self,x,y,time):
  352.         #pdb.set_trace()
  353.         self.SetClipDraw(1)
  354.         self.DefDraw(x,y,time)
  355.  
  356.     def __del__(self):
  357.         ListWidget.B_ListWidget.__del__(self)
  358.  
  359.     def FinalRelease(self):
  360.         global LaListaDeServidores
  361.  
  362.         LaListaDeServidores = None
  363.         self.StackMenu      = None
  364.         ListWidget.B_ListWidget.FinalRelease(self)
  365.  
  366.     def SetList(self,lista):
  367.         while(self.nWidgets()>0):
  368.             self.RemoveWidget_Idx(0)
  369.  
  370.         self.nElements=0
  371.         self.Position=0
  372.         self.ListItems=[]
  373.         self.VertPos=0
  374.         self.ListSize=0
  375.         self.WidgetsVPos=[]
  376.         self.WidgetsHeights=[]
  377.  
  378.         self.Focus=None
  379.         self.MenuItems=[]
  380.  
  381.         for i in lista:
  382.             m_class=MenuWidget.B_MenuItemTextNoFX
  383.             try:
  384.                 m_class=i["Kind"]
  385.             except:
  386.                 pass
  387.  
  388.             wSubMenu=m_class(self,i,self.StackMenu)
  389.             self.AddMenuElement(wSubMenu)
  390.  
  391.         self.SetFocus_Idx(0)
  392.  
  393.         self.UpArrow=BUIx.B_TextWidget(self,"UpArrow",chr(190),ScorerWidgets.font_server,"..\\..\\Data\\Letras menu med.bmp")
  394.         self.AddWidget(self.UpArrow,77,0,BUIx.B_FrameWidget.B_FR_AbsoluteLeft,BUIx.B_FrameWidget.B_FR_Left,
  395.                                          BUIx.B_FrameWidget.B_FR_AbsoluteTop,BUIx.B_FrameWidget.B_FR_Top)
  396.         self.UpArrow.SetColor(207,144,49)
  397.         self.UpArrow.SetAlpha(0.5)
  398.  
  399.         self.DownArrow=BUIx.B_TextWidget(self,"DownArrow",chr(191),ScorerWidgets.font_server,"..\\..\\Data\\Letras menu med.bmp")
  400.         self.AddWidget(self.DownArrow,77,0,BUIx.B_FrameWidget.B_FR_AbsoluteLeft,BUIx.B_FrameWidget.B_FR_Left,
  401.                                            BUIx.B_FrameWidget.B_FR_AbsoluteBottom,BUIx.B_FrameWidget.B_FR_Bottom)
  402.         self.DownArrow.SetColor(207,144,49)
  403.         self.DownArrow.SetAlpha(0.5)
  404.  
  405.  
  406. class B_ServerLabel(MenuWidget.B_MenuItemTextNoFX):
  407.     def __init__(self,Parent,MenuDescr,StackMenu,VertPos=0):
  408.  
  409.         MenuWidget.B_MenuItemTextNoFX.__init__(self,Parent,MenuDescr,StackMenu)
  410.  
  411.         self.name       = MenuDescr["Name"]
  412.         self.NumPlayers = MenuDescr["NumPlayers"]
  413.         self.MaxPlayers = MenuDescr["MaxPlayers"]
  414.         self.Idx    = MenuDescr["Idx"]
  415.         self.Join    = MenuDescr["Join"]
  416.  
  417.     def ActivateItem(self,act):
  418.         if(act):
  419.             self.Join(self.Name,self.NumPlayers,self.MaxPlayers,self.Idx)
  420.         else:
  421.             MenuWidget.B_MenuItemTextNoFX.ActivateItem(self,act)
  422.  
  423.  
  424.     def Draw(self,x,y,time):
  425.  
  426.         if self.GetVisible()==0:
  427.             return
  428.  
  429.         foc=self.GetHasFocus()
  430.         if foc:
  431.             self.SetColor(252,247,167)
  432.         else:
  433.             self.SetColor(207,144,49)
  434.  
  435.         self.SetText(self.name)
  436.         self.DefDraw(x,y,time)
  437.  
  438.         if  self.MaxPlayers != 0:
  439.             self.SetText(`self.NumPlayers`+" / "+`self.MaxPlayers`)
  440.             self.DefDraw(x+250,y,time)
  441.             self.SetText(self.name)
  442.  
  443. LabelName = ""
  444.  
  445. class B_DescriptorLabel(MenuWidget.B_MenuItemTextNoFX):
  446.     def __init__(self,Parent,MenuDescr,StackMenu):
  447.         MenuWidget.B_MenuItemTextNoFX.__init__(self,Parent,MenuDescr,StackMenu)
  448.         self.SetDrawFunc(self.Draw)
  449.         self.LastLevelName = ""
  450.         self.Parent = Parent
  451.  
  452.     def Draw(self,x,y,time):
  453.         global LabelName
  454.  
  455.         if self.GetVisible()==0:
  456.             return
  457.  
  458.         if self.LastLevelName != LabelName:
  459.             self.SetText(LabelName)
  460.             self.Parent.RecalcLayout()
  461.             self.LastLevelName = LabelName
  462.  
  463.         foc=self.GetHasFocus()
  464.         if foc:
  465.             self.SetColor(252,247,167)
  466.         else:
  467.             self.SetColor(207,144,49)
  468.         self.SetAlpha(1.0)
  469.         self.DefDraw(x,y,time)
  470.  
  471.     def AcceptsFocus(self):
  472.         return 0
  473.